+2005-12-29 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtktreedatalist.c: Use the slice allocater for
+ GtkTreeDataSortHeader.
+
+ * gtk/gtktreedatalist.h:
+ * gtk/gtktreedatalist.c (_gtk_tree_data_list_set_header): New function.
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_sort_func):
+ * gtk/gtkliststore.c (gtk_list_store_set_sort_func):
+ * gtk/gtktreestore.c (gtk_tree_store_set_sort_func): Use it here.
+
2005-12-27 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkbindings.h (GtkBindingSignal):
+2005-12-29 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtktreedatalist.c: Use the slice allocater for
+ GtkTreeDataSortHeader.
+
+ * gtk/gtktreedatalist.h:
+ * gtk/gtktreedatalist.c (_gtk_tree_data_list_set_header): New function.
+
+ * gtk/gtktreemodelsort.c (gtk_tree_model_sort_set_sort_func):
+ * gtk/gtkliststore.c (gtk_list_store_set_sort_func):
+ * gtk/gtktreestore.c (gtk_tree_store_set_sort_func): Use it here.
+
2005-12-27 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkbindings.h (GtkBindingSignal):
{
GtkTreeDataSortHeader *header = NULL;
- header = _gtk_tree_data_list_get_header (list_store->sort_list, sort_column_id);
+ header = _gtk_tree_data_list_get_header (list_store->sort_list,
+ sort_column_id);
/* We want to make sure that we have a function */
g_return_if_fail (header != NULL);
g_return_if_fail (GTK_IS_LIST_STORE (sortable));
g_return_if_fail (func != NULL);
- for (list = list_store->sort_list; list; list = list->next)
- {
- GtkTreeDataSortHeader *list_header;
-
- list_header = (GtkTreeDataSortHeader*) list->data;
- if (list_header->sort_column_id == sort_column_id)
- {
- header = list_header;
- break;
- }
- }
-
- if (header == NULL)
- {
- header = g_new0 (GtkTreeDataSortHeader, 1);
- header->sort_column_id = sort_column_id;
- list_store->sort_list = g_list_append (list_store->sort_list, header);
- }
-
- if (header->destroy)
- {
- GtkDestroyNotify d = header->destroy;
-
- header->destroy = NULL;
- d (header->data);
- }
-
- header->func = func;
- header->data = data;
- header->destroy = destroy;
+ list_store->sort_list = _gtk_tree_data_list_set_header (list_store->sort_list,
+ sort_column_id,
+ func, data, destroy);
if (list_store->sort_column_id == sort_column_id)
gtk_list_store_sort (list_store);
{
GtkTreeDataSortHeader *header;
- header = g_new (GtkTreeDataSortHeader, 1);
+ header = g_slice_new (GtkTreeDataSortHeader);
retval = g_list_prepend (retval, header);
header->sort_column_id = i;
d (header->data);
}
- g_free (header);
+ g_slice_free (GtkTreeDataSortHeader, header);
}
g_list_free (list);
}
GtkTreeDataSortHeader *
-_gtk_tree_data_list_get_header (GList *header_list,
- gint sort_column_id)
+_gtk_tree_data_list_get_header (GList *header_list,
+ gint sort_column_id)
{
GtkTreeDataSortHeader *header = NULL;
}
return NULL;
}
+
+
+GList *
+_gtk_tree_data_list_set_header (GList *header_list,
+ gint sort_column_id,
+ GtkTreeIterCompareFunc func,
+ gpointer data,
+ GtkDestroyNotify destroy)
+{
+ GList *list = header_list;
+ GtkTreeDataSortHeader *header = NULL;
+
+ for (; list; list = list->next)
+ {
+ header = (GtkTreeDataSortHeader*) list->data;
+ if (header->sort_column_id == sort_column_id)
+ break;
+ header = NULL;
+
+ if (list->next == NULL)
+ break;
+ }
+
+ if (header == NULL)
+ {
+ header = g_slice_new0 (GtkTreeDataSortHeader);
+ header->sort_column_id = sort_column_id;
+ if (list)
+ g_list_append (list, header);
+ else
+ header_list = g_list_append (header_list, header);
+ }
+
+ if (header->destroy)
+ {
+ GtkDestroyNotify d = header->destroy;
+
+ header->destroy = NULL;
+ d (header->data);
+ }
+
+ header->func = func;
+ header->data = data;
+ header->destroy = destroy;
+
+ return header_list;
+}
void _gtk_tree_data_list_header_free (GList *header_list);
GtkTreeDataSortHeader *_gtk_tree_data_list_get_header (GList *header_list,
gint sort_column_id);
-
+GList *_gtk_tree_data_list_set_header (GList *header_list,
+ gint sort_column_id,
+ GtkTreeIterCompareFunc func,
+ gpointer data,
+ GtkDestroyNotify destroy);
#endif /* __GTK_TREE_DATA_LIST_H__ */
GtkDestroyNotify destroy)
{
GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *) sortable;
- GtkTreeDataSortHeader *header = NULL;
- GList *list;
g_return_if_fail (GTK_IS_TREE_MODEL_SORT (sortable));
g_return_if_fail (func != NULL);
- for (list = tree_model_sort->sort_list; list; list = list->next)
- {
- GtkTreeDataSortHeader *list_header;
-
- list_header = (GtkTreeDataSortHeader*) list->data;
- if (list_header->sort_column_id == sort_column_id)
- {
- header = list_header;
- break;
- }
- }
-
- if (header == NULL)
- {
- header = g_new0 (GtkTreeDataSortHeader, 1);
- header->sort_column_id = sort_column_id;
- tree_model_sort->sort_list = g_list_append (tree_model_sort->sort_list,
- header);
- }
-
- if (header->destroy)
- {
- GtkDestroyNotify d = header->destroy;
-
- header->destroy = NULL;
- d (header->data);
- }
-
- header->func = func;
- header->data = data;
- header->destroy = destroy;
+ tree_model_sort->sort_list = _gtk_tree_data_list_set_header (tree_model_sort->sort_list,
+ sort_column_id,
+ func, data, destroy);
if (tree_model_sort->sort_column_id == sort_column_id)
gtk_tree_model_sort_sort (tree_model_sort);
{
GtkTreeDataSortHeader *header = NULL;
- header = _gtk_tree_data_list_get_header (tree_store->sort_list, tree_store->sort_column_id);
+ header = _gtk_tree_data_list_get_header (tree_store->sort_list,
+ tree_store->sort_column_id);
/* We want to make sure that we have a function */
g_return_if_fail (header != NULL);
{
GtkTreeDataSortHeader *header = NULL;
- header = _gtk_tree_data_list_get_header (tree_store->sort_list, sort_column_id);
+ header = _gtk_tree_data_list_get_header (tree_store->sort_list,
+ sort_column_id);
/* We want to make sure that we have a function */
g_return_if_fail (header != NULL);
GtkDestroyNotify destroy)
{
GtkTreeStore *tree_store = (GtkTreeStore *) sortable;
- GtkTreeDataSortHeader *header = NULL;
- GList *list;
g_return_if_fail (GTK_IS_TREE_STORE (sortable));
g_return_if_fail (func != NULL);
- for (list = tree_store->sort_list; list; list = list->next)
- {
- GtkTreeDataSortHeader *list_header;
-
- list_header = (GtkTreeDataSortHeader*) list->data;
- if (list_header->sort_column_id == sort_column_id)
- {
- header = list_header;
- break;
- }
- }
-
- if (header == NULL)
- {
- header = g_new0 (GtkTreeDataSortHeader, 1);
- header->sort_column_id = sort_column_id;
- tree_store->sort_list = g_list_append (tree_store->sort_list, header);
- }
-
- if (header->destroy)
- {
- GtkDestroyNotify d = header->destroy;
-
- header->destroy = NULL;
- d (header->data);
- }
-
- header->func = func;
- header->data = data;
- header->destroy = destroy;
+ tree_store->sort_list = _gtk_tree_data_list_set_header (tree_store->sort_list,
+ sort_column_id,
+ func, data, destroy);
if (tree_store->sort_column_id == sort_column_id)
gtk_tree_store_sort (tree_store);